【Python】Python可变参数*args **kwargs |
您所在的位置:网站首页 › python names函数 › 【Python】Python可变参数*args **kwargs |
可变参数*args 和 **kwargs
要点
作为函数定义时:收集未匹配参数组成tuple或dict对象
*参数也就是*args收集所有未匹配的位置参数组成一个tuple对象,局部变量args指向此tuple对象 **参数也就是**kwargs收集所有未匹配的关键字参数组成一个dict对象,局部变量kwargs指向此dict对象 def temp(*args,**kwargs): pass 作为函数调用时:解包功能*参数用于解包tuple对象的每个元素,作为一个一个的位置参数传入到函数中 my_tuple = ("w","y","z") temp(*my_tuple) #---等同于---# temp("w","y","z")**参数用于解包dict对象的每个元素,作为一个一个的关键字参数传入到函数中 my_dict = {"name":"wangyuanwai","age":32} temp(**my_dict) #----等同于----# temp(name="wangyuanwai",age=32)定义函数时候,参数*args在前,**kwargs在后,*args和**kwargs组合起来可以传入任意的参数。 Python函数 — 位置参数和关键字参数 *args例子 *args作为参数 定义函数 收集所有未匹配的参数,封存在一个list里 def print_str(first, *second): print(first) print(second) # 定义一个函数,*second作为不定参数此时我们只传入一个参数 print_str("hello")输出会是 hello ()传入的第一个字符串参数"hello"打印出来了,没有传入参数的*second则打印的是一个tuple对象的字符串表示形式,即一个括号"()" 。 注意:()表示含有0个元素的tuple对象! 函数调用时的 *args 进行解包调用print_str()函数时,直接传入一个 *参数会发生什么? def print_str(first, *second): print(first) print(second) numbers_strings = ("1","2","3","4","5") print_str(*numbers_strings)输出结果为: 1 ('2', '3', '4', '5')*numbers_strings出现在函数调用时,称为解包(一个“*”字符后面紧挨着1个tuple对象),numbers_strings自身是一个tuple对象,所以也称为元组的解包,tuple中的元素解包成一个一个的位置参数传入到函数中,所以才有下面两个语句的相等性! **kwargs例子 函数定义中,参数名称前有两个** 收集所有未匹配的参数,封存在一个字典里
然后进行函数的调用, printStr('first','second','third','fourth',fifth = '5')输出结果为: first second ('third', 'fourth') {'fifth': '5'}kwargs字典收集了{‘fifth’: ‘5’}这个键值对。当然,在写函数的时候,如果需要取得这个’fifth’: ‘5’,使用字典的get()方法比较好。 函数调用时,传入的关键字参数有匹配的位置参数时,则位置参数优先使用(匹配)这些关键字参数,剩余所有未使用(未匹配)的关键字参数会在函数内组装进一个dict对象中,组装后dict对象会赋值给变量名anything,此时局部变量anything指向一个dict对象 注意:**参数只收集未匹配的关键字参数 函数调用时使用字典解包功能(dict对象前加**) def printStr(first, **dict): print(str(first) + "\n") print(dict)传入一个字典,用**进行解包 printDic = {"name": "tyson", "age":"99"} printStr(100, **printDic)相当于 printDic = {"name": "tyson", "age":"99"} printStr(100, name = "tyson", age = "99")又一个例子 my_dict = {"name":"wang","age":32} temp(**my_dict) #----等同于----# temp(name="wang",age=32) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |